﻿using System.Collections.Generic;
using System.ComponentModel;

namespace AutoCommunication.Base
{
    /// <summary>
    /// 斯蒂芬变量组:必须是通过Group()得到的才可以
    /// </summary>
    /// <typeparam name="Tvariable"></typeparam>
    public class Group<Tvariable> where Tvariable : BaseVariable
    {
        /// <summary>
        /// 请求报文
        /// <para>Group方法分组的时候会为此属性赋值</para>
        /// </summary>
        [Browsable(false)]
        public List<byte[]> Requst { get; set; }

        /// <summary>
        /// 相应报文 包括报文头,验证等
        /// </summary>
        [Browsable(false)]
        public byte[] Response { get; set; }

        /// <summary>
        /// 相应数据 真实数据
        /// </summary>
        [Browsable(false)]
        public byte[] ResponseData { get; set; }

        /// <summary>
        /// 起始地址位偏移
        ///
        /// </summary>
        [DisplayName("4.起始位偏移"), Category("变量信息")]
        public int BitOffset { get; set; }

        /// <summary>
        /// 起始地址,用于获取报文的时候用
        /// modbus中,可能代码寄存器和bool的开始
        /// Siemens中,始终代表哪一个字节开始
        /// </summary>
        public int StartAddress { get; set; }

        /// <summary>
        /// 起始字节地址,用于解析的时候用
        ///
        /// </summary>
        public int StartByteAddress { get; set; }

        /// <summary>
        /// 要读取或者写入的长度
        /// modbus中,根据存储区的不同,代表不同,可能是寄存区个数,也可能是位的个数
        /// Siemens中:始终代表的是字节数
        /// </summary>
        public int Length { get; set; }

        /// <summary>
        /// 这个组的所有变量
        /// </summary>
        public List<Tvariable> Varablelist { get; set; } = new List<Tvariable>();
    }
}